/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package station;

import java.util.ArrayList;
import java.util.Random;

/**
 *
 * @author safe
 */
public final class DataSlotBelegung {

    private static boolean[] slotBelegung = new boolean[25]; // geiler name ^^
    private static int ourNextSlot = -1;

    private DataSlotBelegung() {
    }

    public static synchronized int getOurNextSlot() {
        return ourNextSlot;
    }

//    synchronized static int getNextFreeSlotNumber() {
//        for (int i = 0; i < 25; i++) {
//            if (slotBelegung[i] == false) {
//                return i;
//            }
//        }
//        return -1;
//    }
    synchronized static void setNextSlot(int i) {
        ourNextSlot = i;
    }

    synchronized static void calculateNextFreeSlot() {
        //Random rand = new Random();
        // alle leeren slots zählen und array zu initialisieren
        ArrayList<Integer> list = new ArrayList<Integer>();
        int freeSlotNumbers = 0;
        for (int i = 0; i < 25; i++) {
            if (slotBelegung[i] == false) {
                //freeSlotNumbers++;
                list.add(i);
            }
            int len = list.size();
            if(len > 0){
            ourNextSlot = list.get((int) Math.floor((Math.random() * len)));
            setSlotReserved(ourNextSlot);
            }
        }
//        jede freie slotnummer als value in dieses array eintragen
//        int[] arrayForRandom = new int[freeSlotNumbers];
//        int j = 0;
//        for (int i = 0; i < 25; i++) {
//            if (slotBelegung[i] == false) {
//                arrayForRandom[j] = i;
//                j++;
//            }
//        }
//        if (arrayForRandom.length > 0) {
//            // random eine slotnummer auswählen
//            int randomval = (int) Math.floor((Math.random() * j));;
//            ourNextSlot = arrayForRandom[randomval];
//            setSlotReserved(ourNextSlot);
//        }else{
//            System.out.println("Alle Plaetze reserviert. Warte einen Frame.");
//        }
    }

    static synchronized void setSlotReserved(int slotNumber) {
        if (slotNumber >= 0 && slotNumber < 25) {
            slotBelegung[slotNumber] = true;
        }
    }

    static synchronized void setSlotFree(int slotNumber) {
        if (slotNumber >= 0 && slotNumber < 25) {
            slotBelegung[slotNumber] = false;
        }
    }

    static synchronized void setAllToFalse() {
        for (int i = 0; i < 25; i++) {
            slotBelegung[i] = false;
        }
    }
}
